package com.xnfh.network.api

import com.xnfh.framework.bean.BaseResp
import com.xnfh.framework.bean.CropTypeBean
import com.xnfh.framework.bean.FeedBackFieldBean
import com.xnfh.framework.bean.FieldDynamicsBean
import com.xnfh.framework.bean.HomeAppVersion
import com.xnfh.framework.bean.HomeBannerBean
import com.xnfh.framework.bean.HomeTongjiBean
import com.xnfh.framework.bean.NewVersionHelpMessageBean
import com.xnfh.framework.bean.PlanScheme
import com.xnfh.framework.bean.ProductIntroduce
import com.xnfh.framework.bean.TidingBean
import com.xnfh.framework.bean.UserInforBean
import com.xnfh.framework.bean.WeatherDetailBean
import com.xnfh.network.constant.BASEURL
import com.xnfh.network.constant.BASE_URL_OTHER1
import com.xnfh.network.constant.BASE_URL_OTHER2
import com.xnfh.network.constant.SMS_BASE_URL
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded
import retrofit2.http.GET
import retrofit2.http.Headers
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
import retrofit2.http.Query

/**
 * @Description:
 * @author ziheng
 * @date 2023/1/12 16:35
 */
interface ApiService {


    /**
     * 获取验证码
     */
    @Headers("$BASEURL: $SMS_BASE_URL")
    @FormUrlEncoded
    @POST("api/SendSMS")
    suspend fun requestSendCode(
        @Field("tel") tel: String,
        @Field("userinfo") userinfo: String,
        @Field("type") type: Int = 6
    ): BaseResp<String>

    /**
     * 验证 验证码是否正确
     */
    @Headers("$BASEURL: $SMS_BASE_URL")
    @FormUrlEncoded
    @POST("api/CheckSMS")
    suspend fun requestSmsCode(
        @Field("userinfo") userinfo: String,
        @Field("code") code: String
    ): BaseResp<String>

    /**
     * 登录
     */
    @FormUrlEncoded
    @POST("v1/user/loginUser")
    suspend fun requestLogin(@Field("phone") phone: String): BaseResp<UserInforBean>


    /**
     * 获取app是否有新版本
     */
    @GET("v1/help/appModule")
    suspend fun requestAppVersion(@Query("type") type: Int? = 1): BaseResp<HomeAppVersion>

    /**
     * 首页今日头条信息
     */
    @GET("v1/help/listLimit")
    suspend fun requestTodayMessage(): BaseResp<List<HomeBannerBean>>

    /**
     * 首页获取统计次数（服务在线）
     */

    @POST("v1/user/plantCount")
    suspend fun requestTj(): BaseResp<HomeTongjiBean>

    /**
     * 获取首页天气
     */
    @Headers("$BASEURL: $BASE_URL_OTHER1")
    @GET("v1/grid/gridNowHourMeteo")
    suspend fun requestWeather(@Query("lonlats") lonlats: String): BaseResp<WeatherDetailBean>

    /**
     * 获取首页未读消息数量
     */
    @GET("v1/help/tidingsReed")
    suspend fun requestNoRead(): BaseResp<Int>

    /**
     *
     */
    @FormUrlEncoded
    @POST("v1/tiding/tidingsTypeList")
    suspend fun requestMessageOrOtheere(@Field("type") type: Int): BaseResp<List<TidingBean>>

    /**
     * 获取首页金刚位消息入口-》二级消息入口-》三级消息列表
     */
    @GET("v1/help/list")
    suspend fun requestMessageList(
        @Query("pageindex") pageindex: Int,
        @Query("notetype") notetype: Int,
        @Query("pagesize") pagesize: Int = 20
    ): BaseResp<NewVersionHelpMessageBean>


    /**
     * 消息反馈 使用到的地块列表
     */
    @Headers("$BASEURL: $BASE_URL_OTHER2")
    @POST("v1/field/plantFieldList")
    suspend fun requestFeedBackFieldList(): BaseResp<List<FeedBackFieldBean>>

    /**
     * 提交消息反馈
     * 这个老山农是用了单独的一个服务，这里先不做处理，看看后面后端会不会改
     */
    @Multipart
    @POST("v1/api/msg/upgrade/feedbackMsg")
    suspend fun requestFeedBack(@Part parts: List<MultipartBody.Part>): BaseResp<Any>

    /**
     * 获取种植方案列表
     */
    @FormUrlEncoded
    @POST("v1/plan/userPlanCropList")
    suspend fun requestPlanCropList(
        @Field("cropIds") cropIds: String,
        @Field("planName") planName: String,
        @Field("pageNum") pageNum: Int,
        @Field("pageSize") pageSize: Int = 20
    ): BaseResp<PlanScheme>


    /**
     * 田间动态
     */
    @FormUrlEncoded
    @POST("v1/message/feedbackMsgFieldState")
    suspend fun requestFieldMessage(
        @Field("cropId") cropId: Int?,
        @Field("provinceId") provinceId: String?,
        @Field("cityId") cityId: String?,
        @Field("feedbackType") feedbackType: String?,
        @Field("current") current: Int,
        @Field("size") size: Int = 20
    ): BaseResp<FieldDynamicsBean>

    /**
     * 俱乐部-》作物类型
     */
    @FormUrlEncoded
    @POST("v1/tiding/tidingsTypeList")
    suspend fun requestCropType(@Field("type") type: Int = 2): BaseResp<List<CropTypeBean>>


    /**
     * 首页-产品列表
     */
    @FormUrlEncoded
    @POST("v1/product/list")
    suspend fun requestProductList(
        @Field("pageNum") pageNum: Int,
        @Field("productName") productName: String?,
        @Field("productType") productType: String?,
        @Field("pageSize") pageSize: Int = 20
    ): BaseResp<ProductIntroduce>
}